import request from "@/router/axios";
import { getPageUrl, getSearchString } from './util'
export default {
    // wx.config通过config接口注入权限验证配置
    wxConfig: (jsApiList) => {
        return new Promise((resolve, reject) => {
            let url = getPageUrl().split("#/")[0];
            request({
                url: `/cp/agent/wxjssdk/config?uriPath=${encodeURIComponent(url)}`,
                method: "get"
            }).then(res => {
                res = res.data;
                if (res.code === 0 && res.data) {
                    let appId = res.data.appId;
                    let noncestr = res.data.nonceStr;
                    let timestamp = res.data.timestamp; //时间戳
                    let signature = res.data.signature;
                    wx.config({
                        beta: true, // 必须这么写，否则wx.invoke调用形式的jsapi会有问题
                        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
                        appId: appId, // 必填，企业微信的corpID
                        timestamp: timestamp, // 必填，生成签名的时间戳
                        nonceStr: noncestr, // 必填，生成签名的随机串
                        signature: signature, // 必填，签名，见 附录-JS-SDK使用权限签名算法
                        jsApiList: jsApiList // 必填，需要使用的JS接口列表，凡是要调用的接口都需要传进来
                    });
                    wx.ready(function (res) {
                        resolve(res)
                    });
                    wx.error(function (res) {
                        reject(res)
                    });
                }
            });
        })
    },
    // 通过agentConfig注入应用的权限
    wxAgentConfig: (jsApiList) => {
        return new Promise((resolve, reject) => {
            let url = getPageUrl().split("#/")[0];
            //test
            var agentId = getSearchString('aid', url) || -1;
            request({
                url: `/cp/agent/wxjssdk/config?agentId=${agentId}&uriPath=${encodeURIComponent(url)}`,
                method: "get"
            }).then(res => {
                res = res.data;
                if (res.code === 0 && res.data) {
                    let data = res.data;
                    let appId = res.data.appId;
                    let noncestr = res.data.nonceStr;
                    let timestamp = res.data.timestamp; //时间戳
                    let signature = res.data.signature;
                    let agentId = res.data.agentId;

                    wx.agentConfig({
                        corpid: appId, // 必填，企业微信的corpid，必须与当前登录的企业一致
                        agentid: agentId, // 必填，企业微信的应用id （e.g. 1000247）
                        timestamp: timestamp, // 必填，生成签名的时间戳
                        nonceStr: noncestr, // 必填，生成签名的随机串
                        signature: signature, // 必填，签名，见附录-JS-SDK使用权限签名算法
                        jsApiList: jsApiList, //必填
                        success: function (res) {
                            // 回调
                            resolve(data)
                        },
                        fail: function (res) {
                            if (res.errMsg.indexOf("function not exist") > -1) {
                                alert('版本过低请升级')
                            }
                            reject(res)
                        }
                    });
                }
            });
        })
    },
    // 获取当前外部联系人userid(客户userid)
    getCurExternalUserId: () => {
        return new Promise((resolve, reject) => {
            wx.invoke('getCurExternalContact', {}, function (res) {
                if (res.err_msg == "getCurExternalContact:ok") {
                    resolve(res.userId) //返回当前外部联系人userId
                } else {
                    //错误处理
                }
            });
        })
    },
    //判断H5页面的入口类型
    getContext: () => {
        return new Promise((resolve, reject) => {
            wx.invoke('getContext', {}, function (res) {
                if (res.err_msg == "getContext:ok") {
                    let entry = res.entry, //返回进入H5页面的入口类型，目前有normal、contact_profile、single_chat_tools、group_chat_tools、chat_attachment
                        shareTicket = res.shareTicket; //可用于调用getShareInfo接口
                    resolve(entry)
                } else {
                    //错误处理
                    reject(res)
                }
            });
        })
    },
    //获取客户群Id
    getCurExternalChat: () => {
        return new Promise((resolve, reject) => {
            wx.invoke('getCurExternalChat', {}, function (res) {
                if (res.err_msg == "getCurExternalChat:ok") {
                    let chatId = res.chatId; //返回当前客户群的群聊ID
                    resolve(chatId)
                } else {
                    //错误处理
                    reject(res)
                }
            });
        })
    },
    /**
     * 分享消息到当前会话 聊天工具栏或附件栏打开的页面中向当前会话发送消息
     * @param {*} type 文本(“text”)，图片(“image”)，视频(“video”)，文件(“file”)，H5(“news”）和小程序(“miniprogram”)
     * @param {*} params 
     * @returns 
     */
    sendChatMessage: (type, params) => {
        let obj = {
            text: {
                content: params.content // //文本内容
            },
            image: {
                mediaid: params.mediaid, //图片的素材id
            },
            video: {
                mediaid: params.mediaid, //视频的素材id
            },
            file: {
                mediaid: params.mediaid, //文件的素材id
            },
            news: {
                link: params.link, //H5消息页面url 必填
                title: params.title, //H5消息标题
                desc: params.desc, //H5消息摘要
                imgUrl: params.imgUrl, //H5消息封面图片URL
            },
            miniprogram: {
                appid: params.appid,//小程序的appid，企业已关联的任一个小程序
                title: params.title, //小程序消息的title
                imgUrl: params.imgUrl,//小程序消息的封面图。必须带http或者https协议头，否则报错 $apiName$:fail invalid imgUrl
                page: params.page, //小程序消息打开后的路径，注意要以.html作为后缀，否则在微信端打开会提示找不到页面
            },
        }
        return new Promise((resolve, reject) => {
            wx.invoke('sendChatMessage', {
                msgtype: type, //消息类型，必填
                enterChat: true, //为true时表示发送完成之后顺便进入会话，仅移动端3.1.10及以上版本支持该字段
                [type]: obj[type]
            }, function (res) {
                if (res.err_msg == 'sendChatMessage:ok') {
                    resolve(res)
                    //发送成功
                }
            })
        })
    },
    // 企业微信内快速跳转到指定的小程序页面
    launchMiniprogram: (params) => {
        return new Promise((resolve, reject) => {
            wx.invoke('launchMiniprogram', {
                "appid": params.appId,  // 需跳转的小程序appid  
                "path": params.path, // 所需跳转的小程序内页面路径及参数。非必填    
            }, function (res) {
                if (res.err_msg == "launchMiniprogram:ok") {
                    resolve(res)
                } else {
                    //错误处理
                    reject(res)
                }
            });
        })
    },
    /**
     * 打开会话
     * @param {*} params 
     * @returns 
     */
    openEnterpriseChat: (params) => {
        return new Promise((resolve, reject) => {
            wx.openEnterpriseChat({
                // 注意：userIds和externalUserIds至少选填一个。内部群最多2000人；外部群最多500人；如果有微信联系人，最多40人
                userIds: params.userIds ? params.userIds.join(';') : '',    //参与会话的企业成员列表，格式为userid1;userid2;...，用分号隔开。
                externalUserIds: params.externalUserIds ? params.externalUserIds.join(';') : '', // 参与会话的外部联系人列表，格式为userId1;userId2;…，用分号隔开。
                groupName: params.groupName || '',  // 会话名称。单聊时该参数传入空字符串""即可。
                chatId: params.chatId || '', // 若要打开已有会话，需指定此参数。如果是新建会话，chatId必须为空串
                success: function (res) {
                    // var chatId = res.chatId; //返回当前群聊ID，仅当使用agentConfig注入该接口权限时才返回chatId
                    // 回调
                    resolve(res)
                },
                fail: function (res) {
                    if (res.errMsg.indexOf('function not exist') > -1) {
                        alert('版本过低请升级')
                    }
                    reject(res)
                }
            });

        })
    },
    /**
     * 选择图片
     * @params {*} count 选择图片的数量
     */
    chooseImage: (count) => {
        return new Promise((resolve, reject) => {
            wx.chooseImage({
                count: count, // 默认9
                sizeType: ['compressed'], // 可以指定是原图还是压缩图，默认二者都有
                sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有
                defaultCameraMode: "batch", //表示进入拍照界面的默认模式，目前有normal与batch两种选择，normal表示普通单拍模式，batch表示连拍模式，不传该参数则为normal模式。从3.0.26版本开始支持front和batch_front两种值，其中front表示默认为前置摄像头单拍模式，batch_front表示默认为前置摄像头连拍模式。（注：用户进入拍照界面仍然可自由切换两种模式）
                isSaveToAlbum: 0, //整型值，0表示拍照时不保存到系统相册，1表示自动保存，默认值是1
                success: function (res) {
                    var localIds = res.localIds; // 返回选定照片的本地ID列表，
                    resolve(localIds)
                    // andriod中localId可以作为img标签的src属性显示图片；
                    // iOS应当使用 getLocalImgData 获取图片base64数据，从而用于img标签的显示（在img标签内使用 wx.chooseImage 的 localid 显示可能会不成功）
                },
                fail: function (res) {
                    reject(res)
                }
            });
        })
    },
    /**
     * 上传图片
     * @param {*} localId 上传的图片的本地ID
     * @returns 
     */
    uploadImage: (localId) => {
        return new Promise((resolve, reject) => {
            wx.uploadImage({
                localId: localId, // 需要上传的图片的本地ID，由chooseImage接口获得
                isShowProgressTips: 1, // 默认为1，显示进度提示
                success: function (res) {
                    var serverId = res.serverId; // 返回图片的服务器端ID
                    resolve(serverId)
                },
                fail: function (res) {
                    reject(res)
                }
            });
        })
    },
    /**
     * 附件栏进入屏蔽“发送”按钮
     * @param {*} localId 上传的图片的本地ID
     * @returns 
     */
    hideChatAttachmentMenu: () => {
        return new Promise((resolve, reject) => {
            wx.invoke('hideChatAttachmentMenu', {
                menuList: ["sendMessage"] // 要隐藏的菜单项,sendMessage。即附件栏底部发送按钮。
            }, function (res) {
                if (res.err_msg == "hideChatAttachmentMenu:ok") {
                    resolve(res)
                } else {
                    reject(res)
                }
            });
        })
    },
    // 在企业微信内快速跳转到添加客户的界面
    navigateToAddCustomer: () => {
        return new Promise((resolve, reject) => {
            wx.invoke('navigateToAddCustomer', {}, function (res) {
                resolve(res)
            });
        })
    },
    /**
     * 发表内容到客户朋友圈
     * @param {*} content 文本内容 attachments: 素材列表
     * @returns 
     */
    shareToExternalMoments: (content, attachments = []) => {
        return new Promise((resolve, reject) => {
            wx.invoke("shareToExternalMoments", {
                text: {
                    content: content || '',    // 文本内容
                },
                attachments: attachments
            }, function (res) {
                if (res.err_msg == "shareToExternalMoments:ok") {
                    resolve(res)
                } else {
                    reject(res)
                }
            }
            );
        })
    },

}